le but est ,a partir d'une expression en PNI ,de trouver son resultat.

la notation polonaise inverse (PNI)

le programme de la liste chainee
le programme de la pile

"Louis Schill"
from pile_optim_tp import*
def NPI(chaine):
    """
    la fonction NPI resoult une expression donnée en entree sous la forme NPI en chaine de charactere
    et renvoie en sortie le resultat de l'expression sous la forme d'un entier
    attention chaque aperateurs et operandes doivent etre espacee d'un espace
    """
    chaine=chaine.strip()
    chaine=chaine.split(' ')
    pile=PileOptim()
    for element in chaine:
        if element=="+" or element=="-" or element=="*":
            operande1=pile.depiler()
            operande2=pile.depiler()
            #assertion pour que l'element choisi ne soit pas un operateur
            assert not operande1=="+" or operande1=="-" or operande1=="*" , "expression fausse"
            assert not operande2=="+" or operande2=="-" or operande2=="*" , "expression fausse"
            pile.empiler(eval(str(operande2)+str(element)+str(operande1)))
        else:
            pile.empiler(element)
    return pile.depiler()

if __name__ == '__main__':
    chaine="8 8 +" #test pour different type d'expression
    print(NPI(chaine))
    chaine="8 10 -"
    print(NPI(chaine))
    chaine="4 7 + 3 *"
    print(NPI(chaine))
    chaine=" 8 8 * 9 + " #test avec des espaces devant et derriere l'expression
    print(NPI(chaine))
    chaine="3 10 2 - *"
    print(NPI(chaine))
			

les etapes du projet

1.on transforme la chaine de caractere en tableau
2.en premier lieu je parcours la pile
3.si ce n'est pas un operateur il est empiler
4.si ca en ai un on depile deux element et on calcule et on rempile le resultat
5.quand la pile ne contient plus qu'une valeur je renvoie celle ci

Chaîne à afficher si l'image ne peut s'afficher
ue pile contenant l'expression
l'expression en cours de calcul
Chaîne à afficher si l'image ne peut s'afficher
la pile en cours de parcours

les difficultes lors du codage

les espaces dans la chaine de charactere

dans le NPI, les operandes et operateurs sont separer entre eux par un espace dans une chaine de caractere.
lorsque j'ai voulu les place dans une piles j'ai utiliser la fonction python split.
cependent si un espace est placer au debut ou a la fin de l'expression le code ne fonctionne plus.
j'ai donc du utiliser la fonction strip pour retirer le premier et le dernier espace de la chaine.